
#include "main_widget.h"
#include <QMessageBox>

#include <QDebug>



#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QSizePolicy>
#include <QPalette>
#include <QFont>
#include <utils.h>
main_widget::main_widget(QWidget *parent)
    : QWidget(parent),m_isLoggedIn(false)
{

setWindowTitle(tr("主界面"));


    // 初始化数据库
    initDatabase();


    adminLogin = new AdminView;
    // 设置窗口标题
    setWindowTitle(QStringLiteral("前进之路"));

    // 设置最小窗口大小
    setMinimumSize(800, 600);

    // 创建背景图层（置于底层）
    m_backgroundLabel = new QLabel(this);
    m_backgroundLabel->setObjectName("backgroundLabel");
    m_backgroundLabel->setScaledContents(true); // 背景图自适应窗口大小
    m_backgroundLabel->lower(); // 确保背景在最底层

    // 创建标题标签
    m_titleLabel = new QLabel(QStringLiteral("前进之路"), this);
    m_titleLabel->setObjectName("titleLabel");
    m_titleLabel->setAlignment(Qt::AlignCenter); // 居中对齐

    // 创建按钮
    m_registerBtn = new QPushButton(QStringLiteral("注册"), this);
   // m_registerBtn->setObjectName("registerBtn");
    m_loginBtn = new QPushButton(QStringLiteral("登录"), this);
    //m_loginBtn->setObjectName("loginBtn");
    m_loginadmin = new QPushButton(QStringLiteral("管理员登陆"), this);
   // m_loginadmin ->setObjectName("adminBtn");
    // 设置按钮样式，使其更美观
    m_registerBtn->setMinimumHeight(50);
    m_loginBtn->setMinimumHeight(50);
    m_loginadmin->setMinimumHeight(50);

    // 创建按钮布局
    m_btnLayout = new QHBoxLayout();
    m_btnLayout->addStretch(); // 左侧伸缩项
    m_btnLayout->addWidget(m_registerBtn);
    m_btnLayout->addSpacing(30); // 按钮之间的间距
    m_btnLayout->addWidget(m_loginBtn);
    m_btnLayout->addStretch(); // 右侧伸缩项
    m_btnLayout->setContentsMargins(50, 20, 50, 50); // 按钮布局的边距

    // 创建主布局
    m_mainLayout = new QVBoxLayout(this);
    m_mainLayout->addStretch(); // 顶部伸缩项
    m_mainLayout->addWidget(m_titleLabel);
    m_mainLayout->addStretch(); // 中间伸缩项
    m_mainLayout->addLayout(m_btnLayout);
    m_mainLayout->setContentsMargins(0, 0, 0, 0); // 主布局无边距

// // 设置功能按钮对象名
//    m_queryBtn->setObjectName("functionBtn");
//    m_addBtn->setObjectName("functionBtn");
//    m_editBtn->setObjectName("functionBtn");
//    m_deleteBtn->setObjectName("functionBtn");

    // 按钮布局
//    QHBoxLayout *btnLayout = new QHBoxLayout();
//    btnLayout->addWidget(m_queryBtn);
//    btnLayout->addWidget(m_addBtn);
//    btnLayout->addWidget(m_editBtn);
//    btnLayout->addWidget(m_deleteBtn);
//    btnLayout->addStretch();
//    btnLayout->addWidget(m_logoutBtn);
//    btnLayout->setSpacing(10);
//    btnLayout->setContentsMargins(20, 10, 20, 10);

    // 主布局
    //QVBoxLayout *mainLayout = new QVBoxLayout(this);
    //mainLayout->addLayout(btnLayout);
    // 添加其他控件（如表格、列表等）
    //mainLayout->addStretch();

    // 设置主布局
    setLayout(m_mainLayout);

    // 连接信号槽
    connect(m_registerBtn, &QPushButton::clicked, this, &main_widget::onRegisterBtnClicked);
    connect(m_loginBtn, &QPushButton::clicked, this, &main_widget::onLoginBtnClicked);
    connect(m_loginadmin, &QPushButton::clicked, this, &main_widget::onLoginAdminClicked);

    //adjustFontSizes();

    // 在main_widget的构造函数中添加
    QFile file("style.qss");
    if (file.open(QFile::ReadOnly)) {
        QString styleSheet = QLatin1String(file.readAll());
        setStyleSheet(styleSheet);
        file.close();
    }
   // connect(m_loginadmin, &QPushButton::clicked, this, &main_widget::onLoginAdminClicked);
    connect(adminLogin,&AdminView::signalClose,this,&main_widget::show);
    // 初始调整字体大小
    adjustFontSizes();
}

main_widget::~main_widget()
{
    // Qt的父对象机制会自动释放子控件，无需手动删除
    m_sqlOperator.close();
}

void main_widget::setBackground(const QString &imagePath)
{
    QPixmap pixmap(imagePath);
    if (pixmap.isNull()) {
        qWarning() << "无法加载背景图片:" << imagePath;
        return;
    }

    m_backgroundLabel->setPixmap(pixmap);
    // 调整背景大小与窗口一致
    m_backgroundLabel->setGeometry(0, 0, width(), height());
}


void main_widget::initDatabase()
{
    // 打开数据库
    if (!m_sqlOperator.open("pro.db", "main_connection")) {
        QMessageBox::critical(this, tr("数据库错误"),
                             tr("无法打开数据库: %1").arg(m_sqlOperator.lastError()));
        return;
    }

    // 检查并创建用户表
    if (!m_sqlOperator.isExistTable("user")) {
        QHash<QString, QString> fields;
        fields.insert("id", "INTEGER");
        fields.insert("username", "VARCHAR(50) UNIQUE");
        fields.insert("password", "VARCHAR(64)"); // SHA256哈希值为64个字符

        QList<QString> pks;
        pks << "id";

        if (!m_sqlOperator.createTable("user", fields, pks)) {

            QMessageBox::critical(this, tr("数据库错误"),
                                 tr("无法创建用户表: %1").arg(m_sqlOperator.lastError()));
        } else {
            // 1. 建表时直接让 id 自增（SQLite 特色）
            QHash<QString, QString> fields;
            fields.insert("id", "INTEGER PRIMARY KEY AUTOINCREMENT"); // 关键：AUTOINCREMENT
            fields.insert("username", "VARCHAR(50) UNIQUE");
            fields.insert("password", "VARCHAR(64)");

            // 2. 无需手动建 SEQUENCE 和触发器，SQLite 自动帮你自增 id
            if (!m_sqlOperator.createTable("user", fields, pks)) {
                // 报错处理...
            }
        }
    }
}

void main_widget::resizeEvent(QResizeEvent *event)
{
    // 调整背景大小
    m_backgroundLabel->setGeometry(0, 0, width(), height());

    // 调整字体大小和间距
    adjustFontSizes();

    // 调用父类的resizeEvent
    QWidget::resizeEvent(event);
}

void main_widget::adjustFontSizes()
{
    // 根据窗口尺寸计算基础大小（取宽高中较小的值）
    int baseSize = qMin(width(), height());

    // 计算标题字体大小（基础大小的1/8），并设置最小字体大小
    int titleFontSize = qMax(24, baseSize / 8);
    QFont titleFont = m_titleLabel->font();
    titleFont.setPointSize(titleFontSize);
    titleFont.setLetterSpacing(QFont::PercentageSpacing, 110); // 字间距增加10%
    m_titleLabel->setFont(titleFont);

    // 计算按钮字体大小（基础大小的1/20），并设置最小字体大小
    int btnFontSize = qMax(14, baseSize / 20);
    QFont btnFont = m_registerBtn->font();
    btnFont.setPointSize(btnFontSize);
    btnFont.setLetterSpacing(QFont::PercentageSpacing, 105); // 字间距增加5%
    m_registerBtn->setFont(btnFont);
    m_loginBtn->setFont(btnFont);

    // 调整按钮大小和按钮之间的间距
    int btnWidth = qMax(100, width() / 8);
    m_registerBtn->setMinimumWidth(btnWidth);
    m_loginBtn->setMinimumWidth(btnWidth);
    m_btnLayout->setSpacing(qMax(20, width() / 40));

    // 调整布局间距
    m_mainLayout->setSpacing(qMax(20, height() / 30));
}

void main_widget::onLoginSuccess(const QString &username)
{
    m_isLoggedIn = true;
    m_currentUser = username;
   // m_statusLabel->setText(tr("当前登录用户: %1").arg(username));
    m_loginBtn->setText(tr("退出登录"));
    QMessageBox::information(this, tr("成功"), tr("登录成功"));

}
void main_widget::onRegisterBtnClicked()
{
    if (m_isLoggedIn) {
        QMessageBox::information(this, tr("提示"), tr("请先退出当前登录"));
        return;
    }

    RegisterDialog dialog(this, &m_sqlOperator);
    dialog.exec();
}

void main_widget::onLoginBtnClicked()
{
    if (m_isLoggedIn) {
        m_isLoggedIn = false;
        m_currentUser.clear();
        //m_statusLabel->setText(tr("请登录或注册"));
        m_loginBtn->setText(tr("登录"));
        QMessageBox::information(this, tr("提示"), tr("已退出登录"));
        return;
    }

    LoginDialog dialog(this, &m_sqlOperator);
    connect(&dialog, &LoginDialog::loginSuccess, this, &main_widget::onLoginSuccess);
    dialog.exec();
    this->hide();
}
void main_widget::onLoginAdminClicked()
{
    // 登录按钮点击事件，供后续开发跳转界面或弹出窗口
    // 此处仅为示例，实际开发中替换为具体逻辑
    //QMessageBox::information(this, QStringLiteral("提示"), QStringLiteral("登录功能待实现"));
    adminLogin->show();
    this->hide();
}
// 登录成功后的业务处理
void main_widget::onUserLoggedIn()
{
    // 这里预留后续业务逻辑
    qDebug() << "用户" << m_currentUser << "已登录，准备加载用户数据";



    // 可以在这里添加：
    // 1. 加载用户个人信息
    // 2. 初始化用户相关数据
    // 3. 跳转到主业务界面等
}

// 获取当前登录状态
bool main_widget::isLoggedIn() const
{
    return m_isLoggedIn;
}

// 获取当前登录用户
QString main_widget::currentUser() const
{
    return m_currentUser;
}
